import { defineConfig } from 'vite';
import { fileURLToPath, URL } from 'node:url'
import * as dotenv from 'dotenv';
import * as fs from 'fs';
import vuePlugin from '@vitejs/plugin-vue';
import vueDevTools from 'vite-plugin-vue-devtools';
import vueJsx from '@vitejs/plugin-vue-jsx';
import { quasar, transformAssetUrls } from '@quasar/vite-plugin';

import tailwindcss from '@tailwindcss/vite'

export default defineConfig(({ command, mode }) => {
  const NODE_ENV = mode || 'development';
  const envFiles = [
    `.env.${NODE_ENV}`
  ];
  for (const file of envFiles) {
    const envConfig = dotenv.parse(fs.readFileSync(file));
    for (const k in envConfig) {
      process.env[k] = envConfig[k];
    }
  }
  const rollupOptions = {
    output: {
      entryFileNames: 'assets/[name].[hash].js',
      chunkFileNames: 'assets/[name].[hash].js',
      assetFileNames: 'assets/[name].[hash].[ext]',
    },
  };

  return {
    plugins: [
      vuePlugin({
        template: { transformAssetUrls }
      }),
      quasar({
        sassVariables: '@/css/quasar.variables.scss'
      }),
      vueJsx(),
      tailwindcss(),
      process.env.VITE_POSITION === 'open' && vueDevTools({ launchEditor: process.env.VITE_EDITOR }),
    ],
    base: '/', // 编译后js导入的资源路径
    root: './', // index.html文件所在位置
    publicDir: 'public', // 静态资源文件夹
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      },
    },
    define: {
      'process.env': {}
    },
    css: {
      // preprocessorOptions: {
      //   scss: {
      //     api: 'modern-compiler' // or "modern"
      //   }
      // }
      preprocessorOptions: {
        scss: {
          /* 自动引入全局scss文件 */
          // additionalData: '@import "./src/styles/global.scss";'
        }
      }
    },
    server: {
      // open: true,
      port: process.env.VITE_CLI_PORT,
      proxy: {
        // 把key的路径代理到target位置
        // detail: https://cli.vuejs.org/config/#devserver-proxy
        [process.env.VITE_BASE_API]: { // 需要代理的路径   例如 '/api'
          target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径
          changeOrigin: true,
          rewrite: path => path.replace(new RegExp('^' + process.env.VITE_BASE_API), ''),
        }
      }
    },
    build: {
      minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
      manifest: false, // 是否产出manifest.json
      sourcemap: false, // 是否产出sourcemap.json
      outDir: 'dist', // 产出目录
      terserOptions: {
        compress: {
          //生产环境时移除console
          drop_console: true,
          drop_debugger: true,
        },
      },
      rollupOptions,
    },

  };
});